/* 
 *	Copyright (C) 2009-2010 miaohua
 *	http://code.google.com/p/lrcshower/
 *
 *  This Program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2, or (at your option)
 *  any later version.
 *   
 *  This Program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 *  GNU General Public License for more details.
 *   
 *  You should have received a copy of the GNU General Public License
 *  along with GNU Make; see the file COPYING.  If not, write to
 *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 
 *  http://www.gnu.org/copyleft/gpl.html
 *
 */

#pragma once
#include "TypeDef.h"

// Save & Query SZ type register value
bool SaveRegSZVal(HKEY Key, const tstring & Name, const tstring & Val);
bool QueryRegSZVal(HKEY Key, const tstring & Name, tstring & Holder);
bool QueryRegSZVal(HKEY Key, const tstring & Name, TCHAR * Holder, DWORD Size);

#define SaveRegDWORDVal(Key, Name, Holder, Action)\
{\
    DWORD Val = Holder;\
    if( RegSetValueEx(Key, Name, NULL, REG_DWORD, (const BYTE*)&Val, sizeof(DWORD)) != ERROR_SUCCESS )\
        Action;\
}

#define QueryRegDWORDVal(Key, Name, Holder, Action)\
{\
     DWORD Val = 0, Size = sizeof(DWORD);\
     if( RegQueryValueEx(Key, Name, 0, NULL, (BYTE*)&Val, &Size) != ERROR_SUCCESS )\
         Action;\
     Holder = Val;\
}

#define QueryRegBoolVal(Key, Name, Holder, Action)\
{\
     DWORD Val = 0, Size = sizeof(DWORD);\
     if( RegQueryValueEx(Key, Name, 0, NULL, (BYTE*)&Val, &Size) != ERROR_SUCCESS )\
         Action;\
     Holder = (Val!=0);\
}


// Reg key helper release struct
// So called RAII
struct RegKeyReleaseHelper
{
      RegKeyReleaseHelper(HKEY ReleaseKey):Key(ReleaseKey){}
      ~RegKeyReleaseHelper(){ RegCloseKey(Key); }
      HKEY Key;
};

